package modle

import (
	"github.com/jinzhu/gorm"
	"sort"
)

type Stage int

const (
	_             = iota
	STAGE_1 Stage = 1
	STAGE_2 Stage = 2
	STAGE_3 Stage = 3
	STAGE_4 Stage = 4
)

type Book struct {
	gorm.Model
	CustomID         string        `form:"CustomID"`         // 编号
	BookNo           string        `form:"BookNo"`           // 书号
	Name             string        `form:"Name"`             // 书名
	CompanyID        string        `form:"CompanyID"`        // 公司编号
	PrintingColor    int           `form:"PrintingColor"`    // 印刷颜色
	Project          int           `form:"Project"`          // 项目
	CaiCha           string        `form:"CaiCha"`           // 彩插
	FenShe           string        `form:"FenShe"`           // 分社
	PageCount        int           `form:"PageCount"`        // 总页数
	Version          string        `form:"Version"`          // 版次
	PicCount         int           `form:"PicCount"`         // 照片图
	EditPic          int           `form:"EditPic"`          // 修图，1=在修，2=完成
	KaiBen           string        `form:"KaiBen"`           // 开本
	ChongHuaTu       int           `form:"ChongHuaTu"`       // 重画图
	XuanTiHao        string        `form:"XuanTiHao"`        // 选题号
	EditAblePicCount int           `form:"EditAblePicCount"` // 可编辑图
	SoftType         int           `form:"SoftType"`         // 软件类型
	NaHuaTu          int           `form:"NaHuaTu"`          // 难画图
	Editor           string        `form:"Editor"`           // 责任编辑
	WenAn            string        `form:"WenAn"`            // 文案
	PanBanYuan       string        `form:"PanBanYuan"`       // 排版员
	HuaTuYuan        string        `form:"HuaTuYuan"`        // 画图员
	JiaoDuiYuan      string        `form:"JiaoDuiYuan"`      // 校对员
	ZhiLianJiKong    string        `form:"ZhiLianJiKong"`    // 质量监控
	PlusPrice        string        `form:"PlusPrice"`        // 加价
	Stage            Stage         `form:"Stage"`            // 阶段 1=排版 2=填报 3=结账
	Status           Status        `form:"Status"`           // 状态
	Remark           string        `form:"Remark"`           // 备注
	Statuses         []*BookStatus `gorm:"foreignkey:BookID"`
}

func BookStage(status Status) Stage {
	if status >= S1_1 && status <= S1_7 {
		return STAGE_1
	}
	if status >= S2_1 && status <= S2_3 {
		return STAGE_2
	}
	if status >= S3_1 && status <= S3_3 {
		return STAGE_3
	}
	if status >= S4_1 && status <= S4_1 {
		return STAGE_4
	}
	return 0
}
func (b *Book) TableName() string {
	return "book"
}

func (b *Book) FilterStage() []*BookStatus {
	var bookStages []*BookStatus
	for _, t := range b.Statuses {
		if t.Stage == b.Stage {
			bookStages = append(bookStages, t)
		}
	}
	sort.Slice(bookStages, func(i, j int) bool {
		return bookStages[i].ID < bookStages[j].ID
	})
	return bookStages
}
